﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using Mc.Fe.Entities;
using Mc.Fe.Logic;

namespace Mc.Fe.WcfService
{
    public class RecepcionService : IRecepcionService
    {
        public RecepcionResponse EnviarCDR(byte[] archivoCDR)
        {            
            RecepcionResponse error = new RecepcionResponse();
            try
            {
                //Verifica el archivo real del XML, lo guarda en el disco y lee el contenido
                var resultado = XmlGenerator.VerificarCDR(archivoCDR);

                if (resultado != null)
                {
                    Notificacion notificacion = new Notificacion();
                    notificacion.ReferenciaID = resultado.ReferenceID;
                    notificacion.ResponseCode = resultado.ResponseCode;
                    notificacion.Descripcion = resultado.Description;

                    try
                    {
                        DataManager.Instance.GuardarNotificacion(notificacion);

                        error.CodigoError = 0;
                        error.DescripcionError = notificacion.Descripcion;
                    }
                    catch (Exception ex)
                    {
                        error.CodigoError = 3;
                        error.DescripcionError = "Archivo recibido no se ha podido guardar los datos.";
                        System.Console.WriteLine(ex.Message);
                    }

                }
                else
                {
                    error.CodigoError = 2;
                    error.DescripcionError = "Archivo recibido no es válido.";
                }
            }
            catch (Exception)
            {

                error.CodigoError = 1;
                error.DescripcionError = "Ha ocurrido error al recibir el archivo CDR.";

            }
            finally {
                EmailService.EnviarCorreo("Notificacion CDR SUNAT: " + DateTime.Now.ToLongDateString(), error.DescripcionError);
            }

            return error;
        }
    }
}